現實問題上,我們可能在一台電腦上訓練一個模型要花掉數週,這時候你應該先想到的,便是如何加速你的訓練,而分散式訓練就是一個好方法,從一台機器分散到多台同時一起,加快訓練的過程。
而使用Estimator API就可以輕鬆地做到分散式訓練,下面大概說明一下使用的概念,在今天的實作會更詳細的介紹。
若要使用分散式訓練,一開始需要做的是在 estimator裡面宣告 config,指定你要分散訓練的一些參數 ( config=run_config ),接著就是使用 tf.estimator.train_and_evaluate() 來做到分散式訓練和評估。

config的內容需使用 tf.estimator.RunConfig() 來給定。

再來就是 training 和 eval 的 spec,例如說要跑多少step、input data是哪個,另外要注意的就是 eval 的頻率,不可以高於每次模型存 checkpoint 的頻率,你可以用 throttle_secs=xxx 來控制 eval 的頻率。


整體的分散式訓練程式碼大概如下,先定義 run_config,接著模型種類,train、eval的spec,最後使用分散式訓練與評估:

使用分散式學習還有一點需要注意:資料的隨機洗牌,你可能會認為說我在本機端已經先將資料隨機洗過了,然而因為你是使用分散式訓練,代表你要把你的資料分送到多個機台,這時候如果沒有在各個機台做隨機洗牌的動作,那麼這些機台拿到的批次資料都會一樣,變得只是多個機台做完全一樣的訓練動作,反而失去分散式訓練的意義了,所以千萬記得,縱使在分散式訓練還是要有隨機洗牌的動作。

在這個實作中,我們將學會:
estimator.train_and_evaluate 函數登入GCP,開啟Notebooks後,複製課程 Github repo (如Day9的Part 1 & 2步驟)。
在左邊的資料夾結構,點進 training-data-analyst > courses > machine_learning > deepdive > 03_tensorflow,然後打開檔案 d_traineval.ipynb。
首先先將input資料重構讀入,如同昨天的lab一開始一樣:



train_and_evaluate() 函式,大致上和前面說的一樣步驟,tf.estimator.LatestExporter() 是將最後的模型存出,以便後續 eval 或生產模型上線使用。



今天介紹了分散式訓練,明天我們將完整地介紹 “使用GCP訓練、監測和部署ML模型”。